/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002-2006
* Sleepycat Software. All rights reserved.
*
* $Id: FileSource.java,v 1.1 2006/05/06 08:59:56 ckaestne Exp $
*/
package com.sleepycat.je.log;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.dbi.EnvironmentImpl;
/**
* FileSource is used as a channel to a log file when faulting in objects
* from the log.
*/
class FileSource implements LogSource {
private RandomAccessFile file;
private int readBufferSize;
private FileManager fileManager;
FileSource(RandomAccessFile file,
int readBufferSize,
FileManager fileManager) {
this.file = file;
this.readBufferSize = readBufferSize;
this.fileManager = fileManager;
}
/**
* @see LogSource#release
*/
public void release()
throws DatabaseException {
}
/**
* @see LogSource#getBytes
*/
public ByteBuffer getBytes(long fileOffset)
throws IOException {
/* Fill up buffer from file. */
ByteBuffer destBuf = ByteBuffer.allocate(readBufferSize);
fileManager.readFromFile(file, destBuf, fileOffset);
assert EnvironmentImpl.maybeForceYield();
destBuf.flip();
return destBuf;
}
/**
* @see LogSource#getBytes
*/
public ByteBuffer getBytes(long fileOffset, int numBytes)
throws IOException {
/* Fill up buffer from file. */
ByteBuffer destBuf = ByteBuffer.allocate(numBytes);
fileManager.readFromFile(file, destBuf, fileOffset);
assert EnvironmentImpl.maybeForceYield();
destBuf.flip();
assert destBuf.remaining() >= numBytes:
"remaining=" + destBuf.remaining() +
" numBytes=" + numBytes;
return destBuf;
}
}